<?php

namespace app\api\controller;
use think\Db;
use app\common\controller\NotifyHandler;
/**
* 通知处理控制器
*
* 完善getOrder, 获取订单信息, 注意必须数组必须包含out_trade_no与total_amount
* 完善checkOrderStatus, 返回订单状态, 按要求返回布尔值
* 完善handle, 进行业务处理, 按要求返回布尔值
*
* 请求地址为index, NotifyHandler会自动调用以上三个方法
*/
class Notify extends NotifyHandler
{
    protected $params; // 订单信息

    public function index()
    {
        parent::init();
    }
    /**
     * 获取订单信息, 必须包含订单号和订单金额
     *
     * @return string $params['out_trade_no'] 商户订单
     * @return float  $params['total_amount'] 订单金额
     */
    public function getOrder()
    {
        // 以下仅示例
        $out_trade_no = $_POST['out_trade_no'];
        $order = Db::name('orderlist')->where('o_number', $out_trade_no)->find();
        $params = [
            'out_trade_no' => $order['o_number'],
            'total_amount' => $order['o_money'],
            'status'       => $order['o_status'],
            'id'           => $order['id']
        ];
        $this->params = $params;
    }

    /**
     * 检查订单状态
     *
     * @return Boolean true表示已经处理过 false表示未处理过
     */
    public function checkOrderStatus()
    {
        // 以下仅示例
        if($this->params['o_status'] == 0) {
            // 表示未处理
            return false;
        } else {
            return true;
        }
    }

    /**
     * 业务处理
     * @return Boolean true表示业务处理成功 false表示处理失败
     */
    public function handle()
    {
        // 启动事务
        Db::startTrans();
        try{
            $order['id']=$this->params['id'];
            $order['o_status']=2;
            $order['o_updatetime']=time();
            $result = Db::name('orderlist')->update($order);
            if($result) {
                $data['messages']=date('Y-m-d H:i:s',time()).'支付宝异步回到处理订单号为：'.$_POST['out_trade_no'].'的订单，将状态修改为2!';
                $data['addtime']=time();
                Db::name('notifyinfo')->insert($data);
                //$orderlist=Db::name('orderlist')->where('a.id',$this->params['id'])->alias('a')->join(['ec_goods'=>'b'],'a.o_id=b.GoodsID','left')->field('a.*,b.Price')->find();
                Db::name('user')->where('id',3)->setInc('consultnum',3);
                return true;
            } else {
                return false;
            }
            // 提交事务
            Db::commit();
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
        }
    }
}